package com.excilys.capicsoubank.services;

import java.util.List;

import org.joda.time.DateTime;
import org.springframework.security.access.annotation.Secured;

import com.excilys.capicsoubank.entities.Account;

/**
 * Service pour la gestion des comptes.
 * 
 * @author Nicolas Poirier
 */
public interface AccountService {

	/**
	 * Retourne la liste des comptes de l'utilisateur connecté.
	 * 
	 * @return la liste des comptes de l'utilisateur connecté
	 */
	@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
	List<Account> getAccountsConnectedUser();

	/**
	 * Retourne le compte correspondant à l'identifiant.
	 * 
	 * @param accountId
	 *            l'identifiant du compte (non null)
	 * @return le compte correspondant à l'identifiant
	 */
	@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
	Account getAccountById(Integer accountId);

	/**
	 * Retourne le solde d'un compte à une date donnée.
	 * 
	 * @param accountId
	 *            l'identifiant du compte (non null)
	 * @param date
	 *            la date
	 * @return le solde d'un compte à une date donnée
	 */
	@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
	long getAccountBalanceAtSpecificDate(Integer accountId, DateTime date);
}
